home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-27 | 15.2 KB | 324 lines | [TEXT/YHS2] |
- module Weights where
-
- import Xlib
- import Utilities
-
- xlookup :: XMArray Int -> Int -> Int -> IO Int
- xlookup keyboard x y =
- if (x < 1 || x > 19 || y < 1 || y > 19)
- then return (-2)
- else xMArrayLookup keyboard ((x-1)*19+(y-1))
-
-
- draw_unit :: XMArray Int -> XMArray Int -> XMArray Int -> Int -> Int -> IO()
- draw_unit keyboard weight1 weight2 x y =
- let
- update_weight :: XMArray Int->Int->Int->Int->Int->Int->Int->IO()
- update_weight weight counter player x y incr_x incr_y
- | x>=1 && x<=19 && y>=1 && y<=19 && counter<=4 =
- cpt_weight x y player >>= \wt ->
- xMArrayUpdate weight ((x-1)*19+(y-1)) wt >>
- update_weight weight (counter+1) player (x+incr_x) (y+incr_y)
- incr_x incr_y
- | otherwise = return ()
- ----------------------------------------------------------------------------
-
- pattern0 :: Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern0 a b c d e p | a==p && b==p && c==p && d==p && e==p = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern1 :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern1 a b c d e f p | (a==0) && (b==p) && (c==p) && (d==p) && (e==p) &&
- (f==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern2 :: Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern2 a b c d e p | (a==0 && b==p && c==p && d==p && e==p)||
- (a==p && b==p && c==p && d==p && e==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern3 :: Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern3 a b c d e p | (a==0 && b==p && c==p && d==p && e==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern4 :: Int -> Int -> Int -> Int -> Int -> Bool
- pattern4 a b c d p | (a==0 && b==p && c==p && d==p) ||
- (a==p && b==p && c==p && d==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern5 :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern5 a b c d e f p | (a==0 && b==p && c==p && d==0 && e==p &&
- f==0) ||
- (a==0 && b==p && c==0 && d==p && e==p &&
- f==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern6 :: Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern6 a b c d e p | (a==0 && b==p && c==p && d==0 && e==p) ||
- (a==0 && b==p && c==0 && d==p && e==p) ||
- (a==p && b==p && c==0 && d==p && e==0) ||
- (a==p && b==0 && c==p && d==p && e==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern7 :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int-> Bool
- pattern7 a b c d e f g p | (a==0 && b==p && c==0 && d==p && e==0 &&
- f==p && g==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern8 :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern8 a b c d e f p | (a==0 && b==p && c==0 && d==p && e==0 &&
- f==p) ||
- (a==p && b==0 && c==p && d==0 && e==p &&
- f==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern9 :: Int -> Int -> Int -> Int -> Int -> Bool
- pattern9 a b c d p | (a==0 && b==p && c==p && d==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern10 :: Int -> Int -> Int -> Int -> Bool
- pattern10 a b c p | (a==0 && b==p && c==p) ||
- (a==p && b==p && c==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern11 :: Int -> Int -> Int -> Int -> Int -> Int -> Bool
- pattern11 a b c d e p | (a==0 && b==p && c==0 && d==p && e==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- pattern12 :: Int -> Int -> Int -> Int -> Int -> Bool
- pattern12 a b c d p | (a==0 && b==p && c==0 && d==p) ||
- (a==p && b==0 && c==p && d==0) = True
- | otherwise = False
- ----------------------------------------------------------------------------
-
- direct1 :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int ->
- Int -> Int -> Int -> Int -> Int -> Int
- direct1 x y pl ptN1 ptN2 ptN3 ptN4 ptN5 pt ptP1 ptP2 ptP3 ptP4 ptP5
- | (pattern0 ptN4 ptN3 ptN2 ptN1 pt pl) ||
- (pattern0 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern0 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern0 ptN1 pt ptP1 ptP2 ptP3 pl) ||
- (pattern0 pt ptP1 ptP2 ptP3 ptP4 pl) = 200
- | (pattern1 ptN4 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern1 ptN3 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern1 ptN2 ptN1 pt ptP1 ptP2 ptP3 pl) ||
- (pattern1 ptN1 pt ptP1 ptP2 ptP3 ptP4 pl) = 40
- | (pattern2 ptN4 ptN3 ptN2 ptN1 pt pl) ||
- (pattern2 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern2 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern2 ptN1 pt ptP1 ptP2 ptP3 pl) = 13
- | (pattern3 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern3 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern3 ptN1 pt ptP1 ptP2 ptP3 pl) = 10
- | (pattern4 ptN3 ptN2 ptN1 pt pl) ||
- (pattern4 ptN2 ptN1 pt ptP1 pl) ||
- (pattern4 ptN1 pt ptP1 ptP2 pl) = 8
- | (pattern5 ptN4 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern5 ptN3 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern5 ptN2 ptN1 pt ptP1 ptP2 ptP3 pl) ||
- (pattern5 ptN1 pt ptP1 ptP2 ptP3 ptP4 pl) = 9
- | (pattern6 ptN4 ptN3 ptN2 ptN1 pt pl) ||
- (pattern6 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern6 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern6 ptN1 pt ptP1 ptP2 ptP3 pl) = 7
- | (pattern7 ptN5 ptN4 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern7 ptN4 ptN3 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern7 ptN3 ptN2 ptN1 pt ptP1 ptP2 ptP3 pl) ||
- (pattern7 ptN2 ptN1 pt ptP1 ptP2 ptP3 ptP4 pl) ||
- (pattern7 ptN1 pt ptP1 ptP2 ptP3 ptP4 ptP5 pl) = 6
- | (pattern8 ptN5 ptN4 ptN3 ptN2 ptN1 pt pl) ||
- (pattern8 ptN4 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern8 ptN3 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern8 ptN2 ptN1 pt ptP1 ptP2 ptP3 pl) ||
- (pattern8 ptN1 pt ptP1 ptP2 ptP3 ptP4 pl) ||
- (pattern8 pt ptP1 ptP2 ptP3 ptP4 ptP5 pl) = 5
- | (pattern9 ptN2 ptN1 pt ptP1 pl) ||
- (pattern9 ptN1 pt ptP1 ptP2 pl) = 4
- | (pattern10 ptN2 ptN1 pt pl) ||
- (pattern10 ptN1 pt ptP1 pl) ||
- (pattern10 pt ptP1 ptP2 pl) = 2
- | (pattern11 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern11 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern11 ptN1 pt ptP1 ptP2 ptP3 pl) = 3
- | (pattern12 ptN3 ptN2 ptN1 pt pl) ||
- (pattern12 ptN2 ptN1 pt ptP1 pl) ||
- (pattern12 ptN1 pt ptP1 ptP2 pl) ||
- (pattern12 pt ptP1 ptP2 ptP3 pl) = 1
- | otherwise = 0
- ----------------------------------------------------------------------------
-
- direct2 :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int ->
- Int -> Int -> Int -> Int -> Int -> Int
- direct2 x y pl ptN1 ptN2 ptN3 ptN4 ptN5 pt ptP1 ptP2 ptP3 ptP4 ptP5
- | (pattern0 ptN4 ptN3 ptN2 ptN1 pt pl) ||
- (pattern0 ptN3 ptN2 ptN1 pt ptP1 pl) ||
- (pattern0 ptN2 ptN1 pt ptP1 ptP2 pl) ||
- (pattern0 ptN1 pt ptP1 ptP2 ptP3 pl) ||
- (pattern0 pt ptP1 ptP2 ptP3 ptP4 pl) = 200
- | otherwise = 0
- -----------------------------------------------------------------------------
-
- cpt_weight :: Int -> Int -> Int -> IO Int
- cpt_weight x y player =
- xMArrayLookup keyboard ((x-1)*19+(y-1)) >>= \(unit) ->
- if (unit /= 0)
- then return (-1)
- else xlookup keyboard x (y-1) >>= \(xyN1) ->
- xlookup keyboard x (y-2) >>= \(xyN2) ->
- xlookup keyboard x (y-3) >>= \(xyN3) ->
- xlookup keyboard x (y-4) >>= \(xyN4) ->
- xlookup keyboard x (y-5) >>= \(xyN5) ->
- xlookup keyboard x (y+1) >>= \(xyP1) ->
- xlookup keyboard x (y+2) >>= \(xyP2) ->
- xlookup keyboard x (y+3) >>= \(xyP3) ->
- xlookup keyboard x (y+4) >>= \(xyP4) ->
- xlookup keyboard x (y+5) >>= \(xyP5) ->
- xlookup keyboard (x-1) y >>= \(xN1y) ->
- xlookup keyboard (x-2) y >>= \(xN2y) ->
- xlookup keyboard (x-3) y >>= \(xN3y) ->
- xlookup keyboard (x-4) y >>= \(xN4y) ->
- xlookup keyboard (x-5) y >>= \(xN5y) ->
- xlookup keyboard (x+1) y >>= \(xP1y) ->
- xlookup keyboard (x+2) y >>= \(xP2y) ->
- xlookup keyboard (x+3) y >>= \(xP3y) ->
- xlookup keyboard (x+4) y >>= \(xP4y) ->
- xlookup keyboard (x+5) y >>= \(xP5y) ->
- xlookup keyboard (x-1) (y-1) >>= \(xN1yN1)->
- xlookup keyboard (x-2) (y-2) >>= \(xN2yN2) ->
- xlookup keyboard (x-3) (y-3) >>= \(xN3yN3) ->
- xlookup keyboard (x-4) (y-4) >>= \(xN4yN4) ->
- xlookup keyboard (x-5) (y-5) >>= \(xN5yN5) ->
- xlookup keyboard (x+1) (y+1) >>= \(xP1yP1) ->
- xlookup keyboard (x+2) (y+2) >>= \(xP2yP2) ->
- xlookup keyboard (x+3) (y+3) >>= \(xP3yP3) ->
- xlookup keyboard (x+4) (y+4) >>= \(xP4yP4) ->
- xlookup keyboard (x+5) (y+5) >>= \(xP5yP5) ->
- xlookup keyboard (x-1) (y+1) >>= \(xN1yP1) ->
- xlookup keyboard (x-2) (y+2) >>= \(xN2yP2) ->
- xlookup keyboard (x-3) (y+3) >>= \(xN3yP3) ->
- xlookup keyboard (x-4) (y+4) >>= \(xN4yP4) ->
- xlookup keyboard (x-5) (y+5) >>= \(xN5yP5) ->
- xlookup keyboard (x+1) (y-1) >>= \(xP1yN1) ->
- xlookup keyboard (x+2) (y-2) >>= \(xP2yN2) ->
- xlookup keyboard (x+3) (y-3) >>= \(xP3yN3) ->
- xlookup keyboard (x+4) (y-4) >>= \(xP4yN4) ->
- xlookup keyboard (x+5) (y-5) >>= \(xP5yN5) ->
- return ( (direct1 x y player xyN1 xyN2 xyN3 xyN4 xyN5 player
- xyP1 xyP2 xyP3 xyP4 xyP5) +
- (direct1 x y player xN1y xN2y xN3y xN4y xN5y player
- xP1y xP2y xP3y xP4y xP5y) +
- (direct1 x y player xN1yN1 xN2yN2 xN3yN3 xN4yN4
- xN5yN5 player xP1yP1 xP2yP2 xP3yP3 xP4yP4
- xP5yP5) +
- (direct1 x y player xN1yP1 xN2yP2 xN3yP3 xN4yP4
- xN5yP5 player xP1yN1 xP2yN2 xP3yN3 xP4yN4
- xP5yN5) )
- -----------------------------------------------------------------------------
-
- -- | 1111 && no_block = 20
- -- | 1111 && one_block = 13
- -- | 111 && no_block = 10
- -- | 111 && one_block = 8
- -- | 11 1 or 1 11 && no_block = 9
- -- | 11 1 or 1 11 && one_block =7
- -- | 1 1 1 && no_block = 6
- -- | 1 1 1 && one_block= 5
- -- | 11 && no_block = 4
- -- | 11 && one_block =2
- -- | 1 1 && no_block =3
- -- | 1 1 && one_block=1
-
- in
- update_weight weight1 0 1 x y 1 1 >>
- update_weight weight2 0 2 x y 1 1 >>
- update_weight weight1 0 1 x y 1 (-1) >>
- update_weight weight2 0 2 x y 1 (-1) >>
- update_weight weight1 0 1 x y (-1) (-1) >>
- update_weight weight2 0 2 x y (-1) (-1) >>
- update_weight weight1 0 1 x y (-1) 1 >>
- update_weight weight2 0 2 x y (-1) 1 >>
- update_weight weight1 0 1 x y 0 1 >>
- update_weight weight2 0 2 x y 0 1 >>
- update_weight weight1 0 1 x y 0 (-1) >>
- update_weight weight2 0 2 x y 0 (-1) >>
- update_weight weight1 0 1 x y (-1) 0 >>
- update_weight weight2 0 2 x y (-1) 0 >>
- update_weight weight1 0 1 x y 1 0 >>
- update_weight weight2 0 2 x y 1 0 >>
- return ()
-
-
- human_unit :: XMArray Int -> Int -> Int -> IO(Bool)
- human_unit keyboard x y =
- let
- pattern0 :: Int -> Int -> Int -> Int -> Int -> Bool
- pattern0 a b c d e | a==b && b==c && c==d && d==e = True
- | otherwise = False
-
- direct3 :: Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int ->
- Int
- direct3 ptN1 ptN2 ptN3 ptN4 pt ptP1 ptP2 ptP3 ptP4
- | (pattern0 ptN4 ptN3 ptN2 ptN1 pt) ||
- (pattern0 ptN3 ptN2 ptN1 pt ptP1) ||
- (pattern0 ptN2 ptN1 pt ptP1 ptP2) ||
- (pattern0 ptN1 pt ptP1 ptP2 ptP3) ||
- (pattern0 pt ptP1 ptP2 ptP3 ptP4) = 200
- | otherwise = 0
- in
- xlookup keyboard x y >>= \(xy) ->
- xlookup keyboard x (y-1) >>= \(xyN1) ->
- xlookup keyboard x (y-2) >>= \(xyN2) ->
- xlookup keyboard x (y-3) >>= \(xyN3) ->
- xlookup keyboard x (y-4) >>= \(xyN4) ->
- xlookup keyboard x (y+1) >>= \(xyP1) ->
- xlookup keyboard x (y+2) >>= \(xyP2) ->
- xlookup keyboard x (y+3) >>= \(xyP3) ->
- xlookup keyboard x (y+4) >>= \(xyP4) ->
- xlookup keyboard (x-1) y >>= \(xN1y) ->
- xlookup keyboard (x-2) y >>= \(xN2y) ->
- xlookup keyboard (x-3) y >>= \(xN3y) ->
- xlookup keyboard (x-4) y >>= \(xN4y) ->
- xlookup keyboard (x+1) y >>= \(xP1y) ->
- xlookup keyboard (x+2) y >>= \(xP2y) ->
- xlookup keyboard (x+3) y >>= \(xP3y) ->
- xlookup keyboard (x+4) y >>= \(xP4y) ->
- xlookup keyboard (x-1) (y-1) >>= \(xN1yN1)->
- xlookup keyboard (x-2) (y-2) >>= \(xN2yN2) ->
- xlookup keyboard (x-3) (y-3) >>= \(xN3yN3) ->
- xlookup keyboard (x-4) (y-4) >>= \(xN4yN4) ->
- xlookup keyboard (x+1) (y+1) >>= \(xP1yP1) ->
- xlookup keyboard (x+2) (y+2) >>= \(xP2yP2) ->
- xlookup keyboard (x+3) (y+3) >>= \(xP3yP3) ->
- xlookup keyboard (x+4) (y+4) >>= \(xP4yP4) ->
- xlookup keyboard (x-1) (y+1) >>= \(xN1yP1) ->
- xlookup keyboard (x-2) (y+2) >>= \(xN2yP2) ->
- xlookup keyboard (x-3) (y+3) >>= \(xN3yP3) ->
- xlookup keyboard (x-4) (y+4) >>= \(xN4yP4) ->
- xlookup keyboard (x+1) (y-1) >>= \(xP1yN1) ->
- xlookup keyboard (x+2) (y-2) >>= \(xP2yN2) ->
- xlookup keyboard (x+3) (y-3) >>= \(xP3yN3) ->
- xlookup keyboard (x+4) (y-4) >>= \(xP4yN4) ->
- xlookup keyboard (x+1) y >>= \(xP1y) ->
- xlookup keyboard (x+2) y >>= \(xP2y) ->
- xlookup keyboard (x+3) y >>= \(xP3y) ->
- xlookup keyboard (x+4) y >>= \(xP4y) ->
- if ((direct3 xyN1 xyN2 xyN3 xyN4 xy xyP1 xyP2 xyP3 xyP4) +
- (direct3 xN1y xN2y xN3y xN4y xy xP1y xP2y xP3y xP4y) +
- (direct3 xN1yN1 xN2yN2 xN3yN3 xN4yN4 xy xP1yP1 xP2yP2 xP3yP3 xP4yP4) +
- (direct3 xN1yP1 xN2yP2 xN3yP3 xN4yP4 xy xP1yN1 xP2yN2 xP3yN3 xP4yN4))
- >=200
- then return (True)
- else return (False)
-